﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using Librerias;
using System.Collections;

namespace eCampus
{
    /// <summary>
    /// Formulario para la Evaluacion de alumnos
    /// </summary>
    public partial class FormEvaluacion : Form
    {
        string usuario;
        string asignatura;

        ENCursar c;
        int numeroEntradas = 0;

        /// <summary>
        /// Constructor parametrizado
        /// </summary>
        /// <param name="usu"></param>
        /// <param name="asig"></param>
        public FormEvaluacion(string usu, string asig)
        {
            usuario = usu;
            asignatura = asig;
            c = new ENCursar(usuario, asignatura);
            InitializeComponent();
            cbFiltro.SelectedIndex = 1;
            RellenarDatagrid(true);
        }


        /// <summary>
        /// Actualiza el contenido del DataGrid,
        /// </summary>
        private void RellenarDatagrid(bool primeraVez = false)
        {
            numeroEntradas++;
            //  dgvBibliografia.DataSource = null;
            ENCursar c = new ENCursar();
            DataSet DS = new DataSet();
            DataTable t = new DataTable();


            if (btBuscar.Visible)
            {
                dgvEvaluacion.DataSource =c.ConsultaNotas(asignatura, tbBuscar.Text, cbFiltro.SelectedIndex);

            }
            else
            {
                dgvEvaluacion.DataSource =c.ConsultaAlumnosPorAsignatura(asignatura);
            }
           
            if (primeraVez)
            {
                dgvEvaluacion.Columns["usuClave"].Visible = false;
                dgvEvaluacion.Columns["usuDepto"].Visible = false;
                dgvEvaluacion.Columns["usuCorreoAlternativo"].Visible = false;
                dgvEvaluacion.Columns["usuImagen"].Visible = false;
                dgvEvaluacion.Columns["usuTelefono"].Visible = false;
                dgvEvaluacion.Columns["usuTipo"].Visible = false;

                dgvEvaluacion.Columns["curCorreo"].Visible = false;
                dgvEvaluacion.Columns["curCodigo"].Visible = false;
                dgvEvaluacion.Columns["curAnyo"].Visible = false;

                dgvEvaluacion.Columns["usuCorreo"].HeaderText = "Correo";
                dgvEvaluacion.Columns["usuNombre"].HeaderText = "Nombre";
                dgvEvaluacion.Columns["usuApellido1"].HeaderText = "Apellido 1";
                dgvEvaluacion.Columns["usuApellido2"].HeaderText = "Apellido 2";
                dgvEvaluacion.Columns["curNotaTeoria"].HeaderText = "Nota teórica";
                dgvEvaluacion.Columns["curNotaPractica"].HeaderText = "Nota práctica";
                dgvEvaluacion.Columns["curNotaFinal"].HeaderText = "Nota final";

                dgvEvaluacion.Columns["usuCorreo"].ReadOnly = true;
                dgvEvaluacion.Columns["usuNombre"].ReadOnly = true;
                dgvEvaluacion.Columns["usuApellido1"].ReadOnly = true;
                dgvEvaluacion.Columns["usuApellido2"].ReadOnly = true;

                dgvEvaluacion.AlternatingRowsDefaultCellStyle.BackColor = Color.LightGoldenrodYellow;
                dgvEvaluacion.Columns["usuApellido2"].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill;
            }
        }


        /// <summary>
        /// Evento asociado al datagridview
        /// </summary>
        /// <param name="sender">dgvEvaluacion</param>
        /// <param name="e">EditingControlShowing></param>
        private void dgvEvaluacion_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
        {
            if (dgvEvaluacion.CurrentCell.ColumnIndex == 0 || dgvEvaluacion.CurrentCell.ColumnIndex == 1 || dgvEvaluacion.CurrentCell.ColumnIndex == 2)
            {

                TextBox txt = e.Control as TextBox;

                if (txt != null)
                {

                    txt.KeyPress -= new KeyPressEventHandler(dgvEvaluacion_KeyPress);

                    txt.KeyPress += new KeyPressEventHandler(dgvEvaluacion_KeyPress);

                }

            }
        }
        /// <summary>
        /// Evento asociado al datagrid
        /// </summary>
        /// <param name="sender">dgvEvaluacion</param>
        /// <param name="e">KeyPress</param>
      private void dgvEvaluacion_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (dgvEvaluacion.CurrentCell.ColumnIndex == 1 || dgvEvaluacion.CurrentCell.ColumnIndex == 2 || dgvEvaluacion.CurrentCell.ColumnIndex == 0)
            {

                if (e.KeyChar == (char)Keys.Back || char.IsNumber(e.KeyChar))
                {

                    e.Handled = false;
                   
                }

                else

                    e.Handled = true;
            }
        }
    

        /// <summary>
        /// Estaablece una búsqueda
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
      private void btBusquedaSimple_Click(object sender, EventArgs e)
      {
          btBuscar.Visible = true;
          RellenarDatagrid();
      }

      private void dgvEvaluacion_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
      {
          if (e.Value != null && e.Value.ToString() == "-1")
          {
              e.Value = "";
          }
      }

      /// <summary>
      /// Dada una fila, la guarda en la base de datos
      /// </summary>
      /// <param name="fila"></param>
      private void GuardarEnBd(int fila)
      {
          string cor = dgvEvaluacion["curCorreo", fila].Value.ToString();
          string cod = dgvEvaluacion["curCodigo", fila].Value.ToString();
          DateTime fec = System.DateTime.Now;//Convert.ToDateTime(dd.ToString("dd/mm/yyyy"));

          float np, nt, nf;
          if (dgvEvaluacion["curNotaPractica", fila].Value.ToString() == "")
          {
              np = -1;
          }
          else
          {
              np = float.Parse(dgvEvaluacion["curNotaPractica", fila].Value.ToString());
          }

          if (dgvEvaluacion["curNotaTeoria", fila].Value.ToString() == "")
          {
              nt = -1;
          }
          else
          {
              nt = float.Parse(dgvEvaluacion["curNotaTeoria", fila].Value.ToString());
          }

          if (dgvEvaluacion["curNotaFinal", fila].Value.ToString() == "")
          {
              nf = -1;
          }
          else
          {
              nf = float.Parse(dgvEvaluacion["curNotaFinal", fila].Value.ToString());
          }
          c = new ENCursar(cor, fec, cod, np, nt, nf);
          c.Evaluar();
      }

        /// <summary>
        /// Comprueba los datos introducidos
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
      private void dgvEvaluacion_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
      {
          if ((e.ColumnIndex == dgvEvaluacion.Columns["curNotaTeoria"].Index ||
              e.ColumnIndex == dgvEvaluacion.Columns["curNotaPractica"].Index ||
              e.ColumnIndex == dgvEvaluacion.Columns["curNotaFinal"].Index)
              && e.FormattedValue.ToString() != "")
          {
              try
              {
                  float aux = float.Parse(e.FormattedValue.ToString());
                  
                  if (aux < 0 || aux > 10) throw new Exception();
              }
              catch (Exception)
              {
                  e.Cancel = true;
                  MessageBox.Show("La nota introducida no es válida", "Error");
              }
          }
      }

        /// <summary>
        /// Elimina búsqueda
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
      private void btBuscar_Click(object sender, EventArgs e)
      {
          btBuscar.Visible = false;
          RellenarDatagrid();
      }

      private void dgvEvaluacion_CellValidated(object sender, DataGridViewCellEventArgs e)
      {
          try
          {
              //Si todo bien, inserta en BD
              GuardarEnBd(e.RowIndex);
          }
          catch (Exception)
          {
              MessageBox.Show("No se pudo introducir la nota en la bd", "Error");
          }
      }
    }
    
}

